package com.javaweb.dao.impl;

import com.javaweb.dao.CommentDao;
import com.javaweb.model.Comment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;
/**
 *
 * @author Wanghai
 * @date 2024/10/13
 */

@Repository
public class CommentDaoImpl implements CommentDao {
    @Autowired
    JdbcTemplate jdbcTemplate ;

    @Override
    public int insert(Comment newComment) {
        // 检查 article_id 是否为空，如果为空则返回 0
        if (newComment.getArticleId() == null) {
            return 0;
        }
        // SQL 插入语句
        String sql = "INSERT INTO tb_comment (content,article_id,user_id, support, oppose, create_time, update_time) " +
                "VALUES (?, ?, ?, ?, ?, ?, ?)";

        // 插入参数
        Object[] args = new Object[] {
                newComment.getContent(),
                newComment.getArticleId(),
                newComment.getUserId(),
                newComment.getSupport(),
                newComment.getOppose(),
                new java.sql.Date(newComment.getCreateTime().getTime()),
                new java.sql.Date(newComment.getUpdateTime().getTime()),
        };
        // 执行插入操作并返回结果
        int result = jdbcTemplate.update(sql, args);
        // 返回 1 表示插入成功，0 表示失败
        return result > 0 ? 1 : 0;
    }

    @Override
    public int insertSupport(Integer commentId) {
        // SQL 更新语句，增加点赞数
        String sql = "UPDATE tb_comment SET support = support + 1 ,update_time= NOW() WHERE id = ?";

        // 执行更新操作，返回受影响的行数
        return jdbcTemplate.update(sql, commentId);
    }

    @Override
    public int insertOppose(Integer commentId) {
        // SQL 更新语句，增加点赞数
        String sql = "UPDATE tb_comment SET oppose=oppose-1 ,update_time= NOW() WHERE id = ?";

        // 执行更新操作，返回受影响的行数
        return jdbcTemplate.update(sql, commentId);
    }

    @Override
    public List<Comment> selectAllCommentsById(Integer articleId) {
        // 检查 articleId 是否为空
        if (articleId == null) {
            return null; // 如果 articleId 为空，返回null
        }

        // SQL 查询语句
        String sql = "SELECT id, content, article_id, user_id, support, oppose, create_time, update_time " +
                "FROM tb_comment " +
                "WHERE article_id = ?";
        List<Comment> comments = new ArrayList<>(); // 创建评论空列表

        // 执行查询并处理结果集
        return jdbcTemplate.query(sql, new Object[]{articleId}, rs -> {
            while (rs.next()) {
                Comment comment = new Comment(); // 创建新的评论对象
                comment.setId(rs.getInt("id")); // 设置评论 ID
                comment.setContent(rs.getString("content")); // 设置评论内容
                comment.setArticleId(rs.getInt("article_id")); // 设置文章 ID
                comment.setUserId(rs.getInt("user_id")); // 设置用户 ID
                comment.setSupport(rs.getInt("support")); // 设置支持数
                comment.setOppose(rs.getInt("oppose")); // 设置反对数
                comment.setCreateTime(rs.getTimestamp("create_time")); // 设置创建时间
                comment.setUpdateTime(rs.getTimestamp("update_time")); // 设置更新时间
                comments.add(comment); // 将评论添加到列表中
            }
            return comments; // 返回评论列表
        });
    }
}
